package cn.com.huzo.service.tech;

import cn.com.huzo.model.entities.tech.MrpLinesResultEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划-材料需求明细管理服务对象接口。
 *
 * @author 吴旭
 */
public interface MrpLinesResultManager extends GenericManager<MrpLinesResultEntity, String> {

    /**
     * 取得全部物料需求明细。
     *
     * @param headerId 材料物料需求计划标识
     * @return 物料需求搭配明细
     * @throws java.lang.Exception
     */
    List<MrpLinesResultEntity> fetchByHeaderId(Long headerId) throws Exception;
    
    /**
     * 仓库根据款号取得备料信息
     *
     * @param paramsMap
     * @return
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchForStockOut(Map<String, Object> paramsMap) throws Exception;

    /**
     * 根据搭配类型取得物料需求明细。
     *
     * @param headerId 物料需求计划标识
     * @param assortmentType 搭配类型
     * @param sortType 排序方法
     * @return 物料需求明细
     * @throws java.lang.Exception
     */
    List<MrpLinesResultEntity> fetchByAssortmentType(Long headerId, Short assortmentType, Short sortType) throws Exception;

    /**
     * 取得选择的调达表全部明细ID
     *
     * @param criterion
     * @return
     * @throws Exception
     */
    List<String> fetchAllSelectedLines(Map<String, Object> criterion) throws Exception;

    /**
     * 重新计算物料需求信息（前提：单耗或者生产指示书发生变化）
     *
     * @param headerId 物料需求计划标识
     * @param billType 单据类型 0 提前组料 1 定版调达
     * @param bomHeaderId 计算用单耗标识
     * @param moHeaderId 计算用生产指示书标识
     * @param styleNo 款号
     * @param updatedBy 更新者或操作者
     * @return
     * @throws java.lang.Exception
     */
    Map<String, Object> reCalculate(Long headerId, Short billType, Long bomHeaderId,
            Long moHeaderId, String styleNo, Long updatedBy) throws Exception;

    // <editor-fold defaultstate="collapsed" desc="订单相关用">
    /**
     * 根据订单ID得到该订单所属各款各款尺码对应的圆卡数量
     *
     * @param poHeaderId 订单ID
     * @return 各款尺码对应的圆卡数量
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchRoundCardQuantityFromMrpByPoHeaderId(Long poHeaderId) throws Exception;

    /**
     * 根据订单ID得到该订单所属各款各款尺码对应的衣架贴数量
     *
     * @param poHeaderId 订单ID
     * @return 各款尺码对应的衣架贴数量
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchHangerStickerQuantityFromMrpByPoHeaderId(Long poHeaderId) throws Exception;
    // </editor-fold>
}
